home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 June: Reference Library / Dev.CD Jun 96 RL / Dev.CD Jun 96 RL.toast / Technical Documentation / develop / develop Issue 24 / develop Issue 24 code / Scriptable Database 1.0a15 / Base / AbstractData.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-19  |  5.4 KB  |  183 lines  |  [TEXT/CWIE]

  1.  
  2. #ifndef __ABSTRACTDATA__
  3. #define __ABSTRACTDATA__
  4.  
  5. //
  6. // For "Boolean" (pity we need to include this file...)
  7. //
  8. #include <Types.h>
  9.  
  10. //
  11. // Enumerations for comparison results
  12. //
  13. enum CompareEnumeration
  14. {
  15.     kSecondObjectComesBefore = -1,
  16.     kObjectKeysEqual,
  17.     kSecondObjectComesAfter,
  18.     kCantCompare
  19. };
  20.  
  21. enum
  22. {
  23.     kAnyType = '****'
  24. };
  25.  
  26. class TAbstractDataReference;
  27. class TConstDataReference;
  28.  
  29. //
  30. // This is our version of memcpy--use the best
  31. // memory copying routine for the platform
  32. // (e.g. BlockMoveData)
  33. //
  34. void CopyMemory(const void *srcPtr, void *destPtr, SInt32 byteCount);
  35.  
  36. //================================================================================
  37. // Class TAbstractCompareBehavior
  38. //================================================================================
  39.  
  40. class TAbstractCompareBehavior
  41. {
  42. private:
  43.     TAbstractCompareBehavior*            fNextBehavior;
  44.  
  45. public:
  46.     TAbstractCompareBehavior();
  47.     ~TAbstractCompareBehavior() { delete fNextBehavior; }
  48.  
  49.     void SetNextBehavior(TAbstractCompareBehavior* nextBehavior) { fNextBehavior = nextBehavior; }
  50.     
  51.     virtual CompareEnumeration CompareDynamicBehavior(const TAbstractDataReference& object1, const TAbstractDataReference& object2) const;
  52.     virtual Boolean ContainsDynamicBehavior(const TAbstractDataReference& object1, const TAbstractDataReference& object2) const;
  53. };
  54.  
  55.  
  56. //================================================================================
  57. // Class TAbstractDataReference
  58. //================================================================================
  59.  
  60. class TAbstractDataReference
  61. {
  62. private:
  63.     static TAbstractCompareBehavior* fFirstBehavior;
  64.     
  65. public:
  66.     TAbstractDataReference();
  67.     virtual ~TAbstractDataReference();
  68.     
  69.     //
  70.     // Data accessibility methods:
  71.     //
  72.     virtual Boolean                    DirectlyReadable() const;
  73.     virtual Boolean                    Writable() const;
  74.     virtual Boolean                    DirectlyWritable() const;
  75.     virtual Boolean                    Resizable() const;
  76.     
  77.     //
  78.     // Read-access methods:
  79.     //
  80.     virtual SInt32                    DataType() const = 0;
  81.     virtual SInt32                    DataLength() const = 0;
  82.     virtual SInt32                    MaxLength() const;
  83.  
  84.     virtual SInt32                    CopyTo(char* destination, SInt32 maxBytesToCopy) const;
  85.  
  86.     //
  87.     // Write-access methods:
  88.     //
  89.     virtual Boolean                    SetDataType(SInt32 newType);
  90.     virtual SInt32                    SetDataLength(SInt32 newLength);
  91.     virtual Boolean                    CopyFrom(const TAbstractDataReference& source, Boolean allowDataToClip = false);
  92.     virtual Boolean                    Resize(SInt32 newSize);
  93.     
  94.     //
  95.     // Direct-access methods:
  96.     //
  97.     virtual const char*                Data() const;
  98.     virtual char*                    Data();
  99.     
  100.     //
  101.     // Data-comparison methods
  102.     //
  103.     CompareEnumeration                Compare(const TAbstractDataReference& object2) const;
  104.     Boolean                            Contains(const TAbstractDataReference& object2) const;
  105.     
  106.     //
  107.     // Static methods of TAbstractDataReference
  108.     //
  109.     static void                        AddCompareBehavoir(TAbstractCompareBehavior* behavior);
  110.     
  111.     static CompareEnumeration        Compare(const TAbstractDataReference& object1, const TAbstractDataReference& object2);
  112.     static CompareEnumeration        CompareDefaultBehavior(const TAbstractDataReference& object1, const TAbstractDataReference& object2);
  113.  
  114.     static Boolean                    ContainsDefaultBehavior(const TAbstractDataReference& object1, const TAbstractDataReference& object2);
  115. };
  116.  
  117. //================================================================================
  118. // Class TConstDataReference
  119. //================================================================================
  120.  
  121. class TConstDataReference : public TAbstractDataReference
  122. {
  123. protected:
  124.     SInt32                fDataType;
  125.     const char*            fData;
  126.     SInt32                fDataLength;
  127.  
  128. public:
  129.     TConstDataReference(SInt32 dataType, const char* data, SInt32 dataLength) : fDataType(dataType), fData((char*)data), fDataLength(dataLength) {}
  130.     TConstDataReference(const TAbstractDataReference& data) : fDataType(data.DataType()), fData(data.Data()), fDataLength(data.DataLength()) {}
  131.     
  132.     virtual Boolean                    DirectlyReadable() const;
  133.  
  134.     virtual SInt32                    DataType() const;
  135.     virtual SInt32                    DataLength() const;
  136.     
  137.     SInt32                            CopyTo(char* destination, SInt32 maxBytesToCopy) const;
  138.  
  139.     virtual const char*                Data() const;
  140. };
  141.  
  142. //================================================================================
  143. // Class TUpdataDataReference
  144. //================================================================================
  145.  
  146. class TUpdataDataReference : public TConstDataReference
  147. {
  148. private:
  149.     SInt32                            fMaxLength;
  150.     
  151. public:
  152.     TUpdataDataReference(SInt32 dataType, char* data, SInt32 dataLength, SInt32 maxLength) : TConstDataReference(dataType, data, dataLength), fMaxLength(maxLength) {}
  153.  
  154.     virtual Boolean                    Writable() const;
  155.     virtual Boolean                    DirectlyWritable() const;
  156.  
  157.     virtual char*                    Data();
  158.     virtual SInt32                    MaxLength() const;
  159.  
  160.     virtual Boolean                    SetDataType(SInt32 newType);
  161.     virtual SInt32                    SetDataLength(SInt32 newLength);
  162.  
  163.     virtual Boolean                    CopyFrom(const TAbstractDataReference& source, Boolean allowDataToClip = false);
  164.  
  165. };
  166.  
  167. //================================================================================
  168. // Class TTransientDataReference
  169. //================================================================================
  170.  
  171. class TTransientDataReference : public TConstDataReference
  172. {
  173. protected:
  174.     Boolean                            fAllocatedData;
  175.     
  176. public:
  177.     TTransientDataReference(SInt32 dataType, const char* data, SInt32 dataLength) : TConstDataReference(dataType, (char*)data, dataLength), fAllocatedData(false) {}
  178.     TTransientDataReference(const TAbstractDataReference& data);
  179.     virtual ~TTransientDataReference();
  180. };
  181.  
  182. #endif
  183.